java元数据项错误
我正在为minecraft创建一个mod,并创建了一个元数据项,它有三个变体(默认值,1和2)
当我试图给我的播放器项目:0或什么都没有,我得到这个项目,它的id只是项目没有:编号,但当我给项目:1,给定的项目添加到堆栈项目:0。当我从库存中抛出项目0时,项目1成功地提供了自定义纹理,但其id是项目,而不是项目1
这是我的产品,带有变体代码:
public Trowel(String name, CreativeTabs tab) {
super(name, tab);
this.tab = tab;
}
public void getSubItems(Item item, CreativeTabs tabs, List<ItemStack> list) {
for(int i = 0; i < EnumTrowel.count(); i++) {
list.add(new ItemStack(item, 1, i));
}
}
@Override
public String getUnlocalizedName(ItemStack stack) {
for(int i = 0; i < EnumTrowel.count(); i++) {
if(stack.getItemDamage() == i) {
return this.getUnlocalizedName() + "_" + EnumTrowel.values()[i].getName();
} else {
continue;
}
}
return this.getUnlocalizedName() + "_" + EnumTrowel.CLEAR.getName();
}
这是我的主类preInit()
public static void preInit(FMLPreInitializationEvent event) {
proxy.registerModelBakeryStuff();
RegistryHandler.registerCustomMeshesAndStates();
RegistryHandler.registerFluid(concrete);
for(int i = 0; i < EnumTrowel.count(); i++) {
ModItems.registerRender(ModItems.TROWEL, i, "trowel_" + EnumTrowel.values()[i].getName());
}
}
这是我的ClientProxy注册方法
@Override
public void registerModelBakeryStuff() {
ModelBakery.registerItemVariants(ModItems.TROWEL, new ResourceLocation(Reference.MOD_ID, "trowel_clear"), new ResourceLocation(Reference.MOD_ID, "trowel_plaster"), new ResourceLocation(Reference.MOD_ID, "trowel_gypsum"));
}
项目:0=抹子清理(默认变量)
项目:1=抹平石膏(1种变体)
项目:2=抹平石膏(2种变体)
控制台中没有任何错误
# 1 楼答案
我不确定到底出了什么问题,因为你已经在其他方法背后隐藏了一些东西,而这些方法实际上并不在它们应该在的地方(为什么
ModItems
有一个registerRender
方法?)无论如何,如果我剖析my own code1关于带有变体的项目,我会注意到两件事:
variantName + "=" + variant.getByOrdinal(stack.getMetadata()));
等价的东西。这个字符串实际上将元数据映射到不同的模型。我的变体都是enum指定的和硬映射的metadata <-> enum ordinal
李>ModelLoader.setCustomModelResourceLocation()
的调用,这是告诉游戏如何找到该字符串的资源李>您的代码可能确实包含这些内容,但您没有将其包括在问题中,这使得很难找出哪里出了问题
GameRegistry
系统转换更友好。有一些奇怪的重定向只涉及将数据推入数组到read them back out again later,如果您只是在相关事件(即the more widely accepted standard)中构造项,那么这实际上是不必要的。我做同样的事情,只是在不同的地方